home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / graphics / itgraph / msvc15 / mainfrm.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1995-09-05  |  34.1 KB  |  952 lines

  1. // mainfrm.cpp : implementation of the CMainFrame class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "itgdemo.h"
  6.  
  7. #include "mainfrm.h"
  8.  
  9. #include "itgdmdoc.h"
  10. #include "itgdmvw.h"
  11.  
  12. #include "itgdefs.h"
  13.  
  14. #ifdef _DEBUG
  15. #undef THIS_FILE
  16. static char BASED_CODE THIS_FILE[] = __FILE__;
  17. #endif
  18.  
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CMainFrame
  21.  
  22. static UINT NEAR WM_FINDREPLACE = ::RegisterWindowMessage(FINDMSGSTRING);
  23.  
  24. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  25.  
  26. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  27.     //{{AFX_MSG_MAP(CMainFrame)
  28.     ON_WM_CREATE()
  29.     ON_COMMAND(ID_NODE_NEWNODE, OnNodeNewnode)
  30.     ON_COMMAND(ID_NODE_REMOVE, OnNodeRemove)
  31.     ON_COMMAND(ID_NODE_DUPLICATE, OnNodeDuplicate)
  32.     ON_COMMAND(ID_NODE_BRINGTOFRONT, OnNodeBringtofront)
  33.     ON_COMMAND(ID_NODE_SENDTOBACK, OnNodeSendtoback)
  34.     ON_UPDATE_COMMAND_UI(ID_NODE_REMOVE, OnUpdateNodeRemove)
  35.     ON_UPDATE_COMMAND_UI(ID_NODE_BRINGTOFRONT, OnUpdateNodeBringtofront)
  36.     ON_UPDATE_COMMAND_UI(ID_NODE_SENDTOBACK, OnUpdateNodeSendtoback)
  37.     ON_UPDATE_COMMAND_UI(ID_NODE_DUPLICATE, OnUpdateNodeDuplicate)
  38.     ON_WM_RBUTTONDOWN()
  39.     ON_COMMAND(ID_POPUP_BGCOLOR, OnPopupBgcolor)
  40.     ON_COMMAND(ID_POPUP_FGCOLOR, OnPopupFgcolor)
  41.     ON_COMMAND(ID_POPUP_DEFFILLCOLOR, OnPopupDeffillcolor)
  42.     ON_COMMAND(ID_POPUP_ITEMBORDERCOLOR, OnPopupItembordercolor)
  43.     ON_COMMAND(ID_POPUP_ITEMFILLCOLOR, OnPopupItemfillcolor)
  44.     ON_COMMAND(ID_POPUP_ITEMGRAPHIC, OnPopupItemgraphic)
  45.     ON_COMMAND(ID_POPUP_ITEMSHAPE, OnPopupItemshape)
  46.     ON_COMMAND(ID_POPUP_ITEMTEXTCOLOR, OnPopupItemtextcolor)
  47.     ON_COMMAND(ID_POPUP_FULLGRAPHIC, OnPopupFullgraphic)
  48.     ON_COMMAND(ID_POPUP_HALFGRAPHIC, OnPopupHalfgraphic)
  49.     ON_COMMAND(ID_POPUP_ICONGRAPHIC, OnPopupIcongraphic)
  50.     ON_COMMAND(ID_POPUP_NOGRAPHIC, OnPopupNographic)
  51.     ON_COMMAND(ID_POPUP_FONT, OnPopupFont)
  52.     ON_COMMAND(ID_NODE_FINDNODE, OnNodeFindnode)
  53.     ON_COMMAND(ID_NODE_FINDAGAIN, OnNodeFindagain)
  54.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWARROWS, OnUpdateOptionsDrawarrows)
  55.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWBACKLINKS, OnUpdateOptionsDrawbacklinks)
  56.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWCOLORED, OnUpdateOptionsDrawcolored)
  57.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWCONNLABELS, OnUpdateOptionsDrawconnlabels)
  58.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWHANDLES, OnUpdateOptionsDrawhandles)
  59.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWITEMLABELS, OnUpdateOptionsDrawitemlabels)
  60.     ON_COMMAND(ID_OPTIONS_DRAWARROWS, OnOptionsDrawarrows)
  61.     ON_COMMAND(ID_OPTIONS_DRAWBACKLINKS, OnOptionsDrawbacklinks)
  62.     ON_COMMAND(ID_OPTIONS_DRAWCOLORED, OnOptionsDrawcolored)
  63.     ON_COMMAND(ID_OPTIONS_DRAWCONNLABELS, OnOptionsDrawconnlabels)
  64.     ON_COMMAND(ID_OPTIONS_DRAWHANDLES, OnOptionsDrawhandles)
  65.     ON_COMMAND(ID_OPTIONS_DRAWITEMLABELS, OnOptionsDrawitemlabels)
  66.     ON_UPDATE_COMMAND_UI(ID_NODE_FINDAGAIN, OnUpdateNodeFindagain)
  67.     ON_COMMAND(ID_OPTIONS_ARRANGEMODE_COMPACT, OnOptionsArrangemodeCompact)
  68.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_ARRANGEMODE_COMPACT, OnUpdateOptionsArrangemodeCompact)
  69.     ON_COMMAND(ID_OPTIONS_ARRANGEMODE_FLOWCHART, OnOptionsArrangemodeFlowchart)
  70.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_ARRANGEMODE_FLOWCHART, OnUpdateOptionsArrangemodeFlowchart)
  71.     ON_COMMAND(ID_OPTIONS_ARRANGEMODE_HIERARCHY, OnOptionsArrangemodeHierarchy)
  72.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_ARRANGEMODE_HIERARCHY, OnUpdateOptionsArrangemodeHierarchy)
  73.     ON_COMMAND(ID_OPTIONS_ARRANGEMODE_TREE, OnOptionsArrangemodeTree)
  74.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_ARRANGEMODE_TREE, OnUpdateOptionsArrangemodeTree)
  75.     ON_COMMAND(ID_OPTIONS_AUTOARRANGE_AUTOMATIC, OnOptionsAutoarrangeAutomatic)
  76.     ON_COMMAND(ID_OPTIONS_AUTOARRANGE_MANUAL, OnOptionsAutoarrangeManual)
  77.     ON_COMMAND(ID_OPTIONS_AUTOARRANGE_NOW, OnOptionsAutoarrangeNow)
  78.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_AUTOARRANGE_AUTOMATIC, OnUpdateOptionsAutoarrangeAutomatic)
  79.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_AUTOARRANGE_MANUAL, OnUpdateOptionsAutoarrangeManual)
  80.     ON_COMMAND(ID_OPTIONS_DRAWDIR_BOTTOMTOTOP, OnOptionsDrawdirBottomtotop)
  81.     ON_COMMAND(ID_OPTIONS_DRAWDIR_LEFTTORIGHT, OnOptionsDrawdirLefttoright)
  82.     ON_COMMAND(ID_OPTIONS_DRAWDIR_RIGHTTOLEFT, OnOptionsDrawdirRighttoleft)
  83.     ON_COMMAND(ID_OPTIONS_DRAWDIR_TOPTOBOTTOM, OnOptionsDrawdirToptobottom)
  84.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWDIR_BOTTOMTOTOP, OnUpdateOptionsDrawdirBottomtotop)
  85.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWDIR_LEFTTORIGHT, OnUpdateOptionsDrawdirLefttoright)
  86.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWDIR_RIGHTTOLEFT, OnUpdateOptionsDrawdirRighttoleft)
  87.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWDIR_TOPTOBOTTOM, OnUpdateOptionsDrawdirToptobottom)
  88.     ON_COMMAND(ID_OPTIONS_DRAWSCALE_100, OnOptionsDrawscale100)
  89.     ON_COMMAND(ID_OPTIONS_DRAWSCALE_200, OnOptionsDrawscale200)
  90.     ON_COMMAND(ID_OPTIONS_DRAWSCALE_25, OnOptionsDrawscale25)
  91.     ON_COMMAND(ID_OPTIONS_DRAWSCALE_400, OnOptionsDrawscale400)
  92.     ON_COMMAND(ID_OPTIONS_DRAWSCALE_50, OnOptionsDrawscale50)
  93.     ON_COMMAND(ID_OPTIONS_DRAWSCALE_75, OnOptionsDrawscale75)
  94.     ON_COMMAND(ID_OPTIONS_DRAWSCALE_FITTOSCREEN, OnOptionsDrawscaleFittoscreen)
  95.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWSCALE_100, OnUpdateOptionsDrawscale100)
  96.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWSCALE_200, OnUpdateOptionsDrawscale200)
  97.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWSCALE_25, OnUpdateOptionsDrawscale25)
  98.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWSCALE_400, OnUpdateOptionsDrawscale400)
  99.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWSCALE_50, OnUpdateOptionsDrawscale50)
  100.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWSCALE_75, OnUpdateOptionsDrawscale75)
  101.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWSCALE_FITTOSCREEN, OnUpdateOptionsDrawscaleFittoscreen)
  102.     ON_COMMAND(ID_OPTIONS_RUBBERBAND_BOTH, OnOptionsRubberbandBoth)
  103.     ON_COMMAND(ID_OPTIONS_RUBBERBAND_HANDLES, OnOptionsRubberbandHandles)
  104.     ON_COMMAND(ID_OPTIONS_RUBBERBAND_ITEMS, OnOptionsRubberbandItems)
  105.     ON_COMMAND(ID_OPTIONS_RUBBERBAND_NONE, OnOptionsRubberbandNone)
  106.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_RUBBERBAND_BOTH, OnUpdateOptionsRubberbandBoth)
  107.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_RUBBERBAND_HANDLES, OnUpdateOptionsRubberbandHandles)
  108.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_RUBBERBAND_ITEMS, OnUpdateOptionsRubberbandItems)
  109.     ON_UPDATE_COMMAND_UI(ID_OPTIONS_RUBBERBAND_NONE, OnUpdateOptionsRubberbandNone)
  110.     ON_COMMAND(ID_SPECIAL_RANDOMSIZEDNODES, OnSpecialRandomsizednodes)
  111.     ON_UPDATE_COMMAND_UI(ID_SPECIAL_RANDOMSIZEDNODES, OnUpdateSpecialRandomsizednodes)
  112.     ON_COMMAND(ID_SPECIAL_RANDOMTREE_15NODES, OnSpecialRandomtree15nodes)
  113.     ON_COMMAND(ID_SPECIAL_RANDOMTREE_25NODES, OnSpecialRandomtree25nodes)
  114.     ON_COMMAND(ID_SPECIAL_RANDOMTREE_50NODES, OnSpecialRandomtree50nodes)
  115.     ON_COMMAND(ID_SPECIAL_RANDOMTREE_8NODES, OnSpecialRandomtree8nodes)
  116.     ON_COMMAND(ID_SPECIAL_RANDOMDIRECTEDGRAPH_15NODES, OnSpecialRandomdirectedgraph15nodes)
  117.     ON_COMMAND(ID_SPECIAL_RANDOMDIRECTEDGRAPH_25NODES, OnSpecialRandomdirectedgraph25nodes)
  118.     ON_COMMAND(ID_SPECIAL_RANDOMDIRECTEDGRAPH_50NODES, OnSpecialRandomdirectedgraph50nodes)
  119.     ON_COMMAND(ID_SPECIAL_RANDOMDIRECTEDGRAPH_8NODES, OnSpecialRandomdirectedgraph8nodes)
  120.     ON_UPDATE_COMMAND_UI(ID_FILE_PRINTOUT, OnUpdateFilePrintout)
  121.     ON_COMMAND(ID_FILE_PRINTOUT, OnFilePrintout)
  122.     //}}AFX_MSG_MAP
  123.     ON_REGISTERED_MESSAGE(WM_FINDREPLACE, OnFindReplace)
  124. END_MESSAGE_MAP()
  125.  
  126. /////////////////////////////////////////////////////////////////////////////
  127. // arrays of IDs used to initialize control bars
  128.  
  129. // toolbar buttons - IDs are command buttons
  130. static UINT BASED_CODE buttons[] =
  131. {
  132.     // same order as in the bitmap 'toolbar.bmp'
  133.     ID_FILE_NEW,
  134.     ID_FILE_OPEN,
  135.     ID_FILE_SAVE,
  136.         ID_SEPARATOR,
  137.     ID_EDIT_CUT,
  138.     ID_EDIT_COPY,
  139.     ID_EDIT_PASTE,
  140.         ID_SEPARATOR,
  141.     ID_FILE_PRINT,
  142.     ID_APP_ABOUT,
  143. };
  144.  
  145. static UINT BASED_CODE indicators[] =
  146. {
  147.     ID_SEPARATOR,           // status line indicator
  148.     ID_INDICATOR_CAPS,
  149.     ID_INDICATOR_NUM,
  150.     ID_INDICATOR_SCRL,
  151. };
  152.  
  153. /////////////////////////////////////////////////////////////////////////////
  154. // CMainFrame construction/destruction
  155.  
  156. CMainFrame::CMainFrame()
  157. {
  158.     // TODO: add member initialization code here
  159. }
  160.  
  161. CMainFrame::~CMainFrame()
  162. {
  163. }
  164.  
  165. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  166. {
  167.     if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  168.         return -1;
  169.  
  170.     if (!m_wndToolBar.Create(this) ||
  171.         !m_wndToolBar.LoadBitmap(IDR_MAINFRAME) ||
  172.         !m_wndToolBar.SetButtons(buttons,
  173.           sizeof(buttons)/sizeof(UINT)))
  174.     {
  175.         TRACE("Failed to create toolbar\n");
  176.         return -1;      // fail to create
  177.     }
  178.  
  179.     if (!m_wndStatusBar.Create(this) ||
  180.         !m_wndStatusBar.SetIndicators(indicators,
  181.           sizeof(indicators)/sizeof(UINT)))
  182.     {
  183.         TRACE("Failed to create status bar\n");
  184.         return -1;      // fail to create
  185.     }
  186.  
  187.     return 0;
  188. }
  189.  
  190. /////////////////////////////////////////////////////////////////////////////
  191. // CMainFrame diagnostics
  192.  
  193. #ifdef _DEBUG
  194. void CMainFrame::AssertValid() const
  195. {
  196.     CFrameWnd::AssertValid();
  197. }
  198.  
  199. void CMainFrame::Dump(CDumpContext& dc) const
  200. {
  201.     CFrameWnd::Dump(dc);
  202. }
  203.  
  204. #endif //_DEBUG
  205.  
  206. /////////////////////////////////////////////////////////////////////////////
  207. // CMainFrame message handlers
  208.  
  209. void CMainFrame::OnNodeNewnode()
  210. {
  211.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  212.     pITG->AddItem("", -1);
  213.     pITG->SetNumProperty("SelectedIndex", pITG->GetNumProperty("NewIndex"));
  214. }
  215.  
  216. void CMainFrame::OnNodeRemove()
  217. {
  218.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  219.     pITG->RemoveItem(pITG->GetNumProperty("SelectedIndex"));
  220. }
  221.  
  222. void CMainFrame::OnNodeDuplicate()
  223. {
  224.     int srcIx, cpyIx;
  225.     
  226.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  227.     srcIx = (int)pITG->GetNumProperty("SelectedIndex");
  228.     
  229.     pITG->AddItem(pITG->GetStrProperty("List", srcIx), -1);
  230.     cpyIx = (int)pITG->GetNumProperty("NewIndex");
  231.     
  232.     pITG->SetNumProperty("ItemXpos", pITG->GetNumProperty("ItemXpos", srcIx) + 10, cpyIx);    
  233.     pITG->SetNumProperty("ItemYpos", pITG->GetNumProperty("ItemYpos", srcIx) + 10, cpyIx);
  234.     pITG->SetNumProperty("ItemWidth", pITG->GetNumProperty("ItemWidth", srcIx), cpyIx);
  235.     pITG->SetNumProperty("ItemHeight", pITG->GetNumProperty("ItemHeight", srcIx), cpyIx);    
  236.     pITG->SetNumProperty("ItemBorderColor", pITG->GetNumProperty("ItemBorderColor", srcIx), cpyIx);
  237.     pITG->SetNumProperty("ItemData", pITG->GetNumProperty("ItemData", srcIx), cpyIx);
  238.     pITG->SetNumProperty("ItemDrawLabel", pITG->GetNumProperty("ItemDrawLabel", srcIx), cpyIx);
  239.     pITG->SetNumProperty("ItemFillColor", pITG->GetNumProperty("ItemFillColor", srcIx), cpyIx);
  240.     pITG->SetNumProperty("ItemGraphic", pITG->GetNumProperty("ItemGraphic", srcIx), cpyIx);
  241.     pITG->SetNumProperty("ItemGraphicAlign", pITG->GetNumProperty("ItemGraphicAlign", srcIx), cpyIx);
  242.     pITG->SetNumProperty("ItemGraphicHeight", pITG->GetNumProperty("ItemGraphicHeight", srcIx), cpyIx);
  243.     pITG->SetNumProperty("ItemGraphicLeft", pITG->GetNumProperty("ItemGraphicLeft", srcIx), cpyIx);
  244.     pITG->SetNumProperty("ItemGraphicStyle", pITG->GetNumProperty("ItemGraphicStyle", srcIx), cpyIx);
  245.     pITG->SetNumProperty("ItemGraphicTop", pITG->GetNumProperty("ItemGraphicTop", srcIx), cpyIx);
  246.     pITG->SetNumProperty("ItemGraphicWidth", pITG->GetNumProperty("ItemGraphicWidth", srcIx), cpyIx);
  247.     pITG->SetNumProperty("ItemLabelAlign", pITG->GetNumProperty("ItemLabelAlign", srcIx), cpyIx);
  248.     pITG->SetNumProperty("ItemLabelHeight", pITG->GetNumProperty("ItemLabelHeight", srcIx), cpyIx);
  249.     pITG->SetNumProperty("ItemLabelLeft", pITG->GetNumProperty("ItemLabelLeft", srcIx), cpyIx);
  250.     pITG->SetNumProperty("ItemLabelTop", pITG->GetNumProperty("ItemLabelTop", srcIx), cpyIx);
  251.     pITG->SetNumProperty("ItemLabelWidth", pITG->GetNumProperty("ItemLabelWidth", srcIx), cpyIx);
  252.     pITG->SetNumProperty("ItemShape", pITG->GetNumProperty("ItemShape", srcIx), cpyIx);
  253.     pITG->SetNumProperty("ItemTextColor", pITG->GetNumProperty("ItemTextColor", srcIx), cpyIx);
  254.     pITG->SetNumProperty("SelectedIndex", cpyIx);
  255. }
  256.  
  257. void CMainFrame::OnNodeBringtofront()
  258. {
  259.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  260.     int nIndex = (int)pITG->GetNumProperty("SelectedIndex");
  261.     pITG->SetNumProperty("ItemIndex", pITG->GetNumProperty("ListCount") - 1, nIndex);
  262. }
  263.  
  264. void CMainFrame::OnNodeSendtoback()
  265. {
  266.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  267.     int nIndex = (int)pITG->GetNumProperty("SelectedIndex");
  268.     pITG->SetNumProperty("ItemIndex", 0, nIndex);
  269. }
  270.  
  271. void CMainFrame::OnUpdateNodeRemove(CCmdUI* pCmdUI)
  272. {
  273.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  274.     int isSelected = pITG->GetNumProperty("SelectedIndex") != -1;
  275.     pCmdUI->Enable(isSelected ? MF_GRAYED : MF_ENABLED);    
  276. }
  277.  
  278. void CMainFrame::OnUpdateNodeBringtofront(CCmdUI* pCmdUI)
  279. {
  280.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  281.     int isSelected = pITG->GetNumProperty("SelectedIndex") != -1;
  282.     pCmdUI->Enable(isSelected ? MF_GRAYED : MF_ENABLED);    
  283. }
  284.  
  285. void CMainFrame::OnUpdateNodeSendtoback(CCmdUI* pCmdUI)
  286. {
  287.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  288.     int isSelected = pITG->GetNumProperty("SelectedIndex") != -1;
  289.     pCmdUI->Enable(isSelected ? MF_GRAYED : MF_ENABLED);    
  290. }
  291.  
  292. void CMainFrame::OnUpdateNodeDuplicate(CCmdUI* pCmdUI)
  293. {
  294.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  295.     int isSelected = pITG->GetNumProperty("SelectedIndex") != -1;
  296.     pCmdUI->Enable(isSelected ? MF_GRAYED : MF_ENABLED);    
  297. }
  298.  
  299. void CMainFrame::OnRButtonDown(UINT nFlags, CPoint point)
  300. {
  301.     CFrameWnd::OnRButtonDown(nFlags, point);
  302. }
  303.  
  304. void CMainFrame::OnPopupBgcolor()
  305. {
  306.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  307.     CColorDialog dlgColor;
  308.     dlgColor.m_cc.rgbResult = pITG->GetNumProperty("BackColor");
  309.     dlgColor.m_cc.Flags = CC_ENABLEHOOK + CC_RGBINIT;
  310.     if(dlgColor.DoModal() == IDOK) {
  311.         pITG->SetNumProperty("BackColor", dlgColor.GetColor());
  312.     }
  313. }
  314.  
  315. void CMainFrame::OnPopupFgcolor()
  316. {
  317.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  318.     CColorDialog dlgColor;
  319.     dlgColor.m_cc.rgbResult = pITG->GetNumProperty("ForeColor");
  320.     dlgColor.m_cc.Flags = CC_ENABLEHOOK + CC_RGBINIT;
  321.     if(dlgColor.DoModal() == IDOK) {
  322.         pITG->SetNumProperty("ForeColor", dlgColor.GetColor());
  323.     }
  324. }
  325.  
  326. void CMainFrame::OnPopupDeffillcolor()
  327. {
  328.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  329.     CColorDialog dlgColor;
  330.     dlgColor.m_cc.rgbResult = pITG->GetNumProperty("FillColor");
  331.     dlgColor.m_cc.Flags = CC_ENABLEHOOK + CC_RGBINIT;
  332.     if(dlgColor.DoModal() == IDOK) {
  333.         pITG->SetNumProperty("FillColor", dlgColor.GetColor());
  334.     }
  335. }
  336.  
  337. void CMainFrame::OnPopupItembordercolor()
  338. {
  339.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  340.     int nIndex = (int)pITG->GetNumProperty("SelectedIndex");
  341.     CColorDialog dlgColor;
  342.     dlgColor.m_cc.rgbResult = pITG->GetNumProperty("ItemBorderColor", nIndex);
  343.     dlgColor.m_cc.Flags = CC_ENABLEHOOK + CC_RGBINIT;
  344.     if(dlgColor.DoModal() == IDOK) {
  345.         pITG->SetNumProperty("ItemBorderColor", dlgColor.GetColor(), nIndex);
  346.     }
  347. }
  348.  
  349. void CMainFrame::OnPopupItemfillcolor()
  350. {
  351.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  352.     int nIndex = (int)pITG->GetNumProperty("SelectedIndex");
  353.     CColorDialog dlgColor;
  354.     dlgColor.m_cc.rgbResult = pITG->GetNumProperty("ItemFillColor", nIndex);
  355.     dlgColor.m_cc.Flags = CC_ENABLEHOOK + CC_RGBINIT;
  356.     if(dlgColor.DoModal() == IDOK) {
  357.         pITG->SetNumProperty("ItemFillColor", dlgColor.GetColor(), nIndex);
  358.     }
  359. }
  360.  
  361. void CMainFrame::OnPopupItemgraphic()
  362. {
  363.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  364.     int nIndex = (int)pITG->GetNumProperty("SelectedIndex");
  365.     int nGraphic;    
  366.     nGraphic = (int)pITG->GetNumProperty("ItemGraphic", nIndex);
  367.     pITG->SetNumProperty("GraphicSelect", nGraphic);
  368.     nGraphic = (int)pITG->GetNumProperty("GraphicSelect");
  369.     if(nGraphic != -1)
  370.         pITG->SetNumProperty("ItemGraphic", nGraphic, nIndex);
  371. }
  372.  
  373. void CMainFrame::OnPopupItemshape()
  374. {
  375.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  376.     int nIndex = (int)pITG->GetNumProperty("SelectedIndex");
  377.     int nShape;    
  378.     nShape = (int)pITG->GetNumProperty("ItemShape", nIndex);
  379.     pITG->SetNumProperty("ShapeSelect", nShape);
  380.     nShape = (int)pITG->GetNumProperty("ShapeSelect");
  381.     if(nShape != -1)
  382.         pITG->SetNumProperty("ItemShape", nShape, nIndex);
  383. }
  384.  
  385. void CMainFrame::OnPopupItemtextcolor()
  386. {
  387.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  388.     int nIndex = (int)pITG->GetNumProperty("SelectedIndex");
  389.     CColorDialog dlgColor;
  390.     dlgColor.m_cc.rgbResult = pITG->GetNumProperty("ItemTextColor", nIndex);
  391.     dlgColor.m_cc.Flags = CC_ENABLEHOOK + CC_RGBINIT;
  392.     if(dlgColor.DoModal() == IDOK) {
  393.         pITG->SetNumProperty("ItemTextColor", dlgColor.GetColor(), nIndex);
  394.     }
  395. }
  396.  
  397. void CMainFrame::OnPopupFullgraphic()
  398. {
  399.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  400.     int nIndex = (int)pITG->GetNumProperty("SelectedIndex");
  401.     pITG->SetNumProperty("ItemGraphicStyle", ITG_GraphicShapeFill, nIndex);
  402.     pITG->SetNumProperty("ItemLabelLeft", 0, nIndex);
  403.     pITG->SetNumProperty("ItemLabelWidth", 0, nIndex);
  404.     pITG->SetNumProperty("ItemLabelTop", 0, nIndex);
  405.     pITG->SetNumProperty("ItemLabelHeight", 0, nIndex);
  406.     pITG->SetNumProperty("ItemLabelAlign", ITG_AlignMiddleCenter, nIndex);
  407. }
  408.  
  409. void CMainFrame::OnPopupHalfgraphic()
  410. {
  411.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  412.     int nIndex = (int)pITG->GetNumProperty("SelectedIndex");
  413.     
  414.     pITG->SetNumProperty("ItemGraphicStyle", ITG_GraphicIconFill, nIndex);
  415.     pITG->SetNumProperty("ItemGraphicLeft", 0, nIndex);
  416.     pITG->SetNumProperty("ItemGraphicWidth", pITG->GetNumProperty("ItemWidth", nIndex) / 2, nIndex);
  417.     pITG->SetNumProperty("ItemGraphicTop", 0, nIndex);
  418.     pITG->SetNumProperty("ItemGraphicHeight", pITG->GetNumProperty("ItemHeight", nIndex), nIndex);
  419.     
  420.     pITG->SetNumProperty("ItemLabelLeft", pITG->GetNumProperty("ItemWidth", nIndex)/2 + 2, nIndex);
  421.     pITG->SetNumProperty("ItemLabelWidth", 0, nIndex);
  422.     pITG->SetNumProperty("ItemLabelTop", 0, nIndex);
  423.     pITG->SetNumProperty("ItemLabelHeight", 0, nIndex);
  424.     pITG->SetNumProperty("ItemLabelAlign", ITG_AlignMiddleLeft, nIndex);
  425. }
  426.  
  427. void CMainFrame::OnPopupIcongraphic()
  428. {
  429.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  430.     int nIndex = (int)pITG->GetNumProperty("SelectedIndex");
  431.  
  432.     
  433.     pITG->SetNumProperty("ItemGraphicStyle", ITG_GraphicIconFillIso, nIndex);
  434.     pITG->SetNumProperty("ItemGraphicLeft", 5, nIndex);
  435.     pITG->SetNumProperty("ItemGraphicWidth", 32, nIndex);
  436.     pITG->SetNumProperty("ItemGraphicTop", 5, nIndex);
  437.     pITG->SetNumProperty("ItemGraphicHeight", 32, nIndex);
  438.     
  439.     pITG->SetNumProperty("ItemLabelLeft", 40, nIndex);
  440.     pITG->SetNumProperty("ItemLabelWidth", 0, nIndex);
  441.     pITG->SetNumProperty("ItemLabelTop", 0, nIndex);
  442.     pITG->SetNumProperty("ItemLabelHeight", 0, nIndex);
  443.     pITG->SetNumProperty("ItemLabelAlign", ITG_AlignMiddleLeft, nIndex);
  444. }
  445.  
  446. void CMainFrame::OnPopupNographic()
  447. {
  448.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  449.     int nIndex = (int)pITG->GetNumProperty("SelectedIndex");
  450.     pITG->SetNumProperty("ItemGraphicStyle", ITG_GraphicNone, nIndex);
  451.     pITG->SetNumProperty("ItemLabelLeft", 0, nIndex);
  452.     pITG->SetNumProperty("ItemLabelWidth", 0, nIndex);
  453.     pITG->SetNumProperty("ItemLabelTop", 0, nIndex);
  454.     pITG->SetNumProperty("ItemLabelHeight", 0, nIndex);
  455.     pITG->SetNumProperty("ItemLabelAlign", ITG_AlignMiddleCenter, nIndex);
  456. }
  457.  
  458. void CMainFrame::OnPopupFont()
  459. {
  460.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  461.     
  462.     LOGFONT lfData;
  463.     memset(&lfData, 0, sizeof(LOGFONT));
  464.     lfData.lfHeight = (int)(pITG->GetFloatProperty("FontSize") / 0.6);
  465.     lfData.lfWeight = (int)pITG->GetNumProperty("FontBold") ? FW_BOLD : FW_NORMAL;
  466.     lfData.lfItalic = (int)pITG->GetNumProperty("FontItalic");
  467.     lfData.lfUnderline = (int)pITG->GetNumProperty("FontUnderline");
  468.     lfData.lfStrikeOut = (int)pITG->GetNumProperty("FontStrikethru");
  469.     sprintf(lfData.lfFaceName, "%s", (const char *)pITG->GetStrProperty("FontName"));
  470.     
  471.     CFontDialog dlgFont;
  472.     dlgFont.m_cf.lpLogFont = &lfData;
  473.     dlgFont.m_cf.rgbColors = (COLORREF)pITG->GetNumProperty("ForeColor");
  474.     dlgFont.m_cf.Flags |= CF_INITTOLOGFONTSTRUCT | CF_ENABLEHOOK | CF_EFFECTS;
  475.     if(dlgFont.DoModal() == IDOK) {
  476.         pITG->SetStrProperty("FontName", dlgFont.GetFaceName());
  477.         pITG->SetFloatProperty("FontSize", (float)dlgFont.GetSize() / (float)10);
  478.         pITG->SetNumProperty("FontBold", dlgFont.GetWeight() > FW_NORMAL);
  479.         pITG->SetNumProperty("FontItalic", dlgFont.IsItalic());
  480.         pITG->SetNumProperty("FontUnderline", dlgFont.m_cf.lpLogFont->lfUnderline);
  481.         pITG->SetNumProperty("FontStrikethru", dlgFont.IsStrikeOut());
  482.         pITG->SetNumProperty("ForeColor", (LONG)dlgFont.GetColor());
  483.     }
  484. }
  485.  
  486. void CMainFrame::OnNodeFindnode()
  487. {    
  488.     CFindReplaceDialog *pDlgFind = new CFindReplaceDialog();
  489.     pDlgFind->m_fr.Flags |= FR_HIDEMATCHCASE | FR_HIDEWHOLEWORD | FR_HIDEUPDOWN;
  490.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();    
  491.     pDlgFind->Create(TRUE, pView->m_sFindStr);
  492. }
  493.  
  494. void CMainFrame::OnNodeFindagain()
  495. {
  496.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  497.     pView->FindNode(pView, pView->m_sFindStr);
  498. }
  499.  
  500. LRESULT CMainFrame::OnFindReplace(WPARAM wParam, LPARAM lParam)
  501. {
  502.     CFindReplaceDialog *pDlgFind = CFindReplaceDialog::GetNotifier(lParam);
  503.     if(pDlgFind->FindNext()) {
  504.         CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  505.         pView->m_sFindStr = pDlgFind->GetFindString();
  506.         pView->FindNode(pDlgFind, pView->m_sFindStr);
  507.     }
  508.     return 0L;
  509. }
  510. void CMainFrame::OnUpdateOptionsDrawarrows(CCmdUI* pCmdUI)
  511. {
  512.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  513.     int isSet = pITG->GetNumProperty("DrawArrows") != 0;
  514.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  515. }
  516.  
  517. void CMainFrame::OnUpdateOptionsDrawbacklinks(CCmdUI* pCmdUI)
  518. {
  519.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  520.     int isSet = pITG->GetNumProperty("DrawBackLinks") != 0;
  521.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  522. }
  523.  
  524. void CMainFrame::OnUpdateOptionsDrawcolored(CCmdUI* pCmdUI)
  525. {
  526.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  527.     int isSet = pITG->GetNumProperty("DrawColored") != 0;
  528.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  529. }
  530.  
  531. void CMainFrame::OnUpdateOptionsDrawconnlabels(CCmdUI* pCmdUI)
  532. {
  533.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  534.     int isSet = pITG->GetNumProperty("DrawConnLabels") != 0;
  535.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  536. }
  537.  
  538. void CMainFrame::OnUpdateOptionsDrawhandles(CCmdUI* pCmdUI)
  539. {
  540.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  541.     int isSet = pITG->GetNumProperty("DrawHandles") != 0;
  542.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  543.     
  544. }
  545.  
  546. void CMainFrame::OnUpdateOptionsDrawitemlabels(CCmdUI* pCmdUI)
  547. {
  548.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  549.     int isSet = pITG->GetNumProperty("DrawItemLabels") != 0;
  550.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  551. }
  552.  
  553. void CMainFrame::OnOptionsDrawarrows()
  554. {
  555.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  556.     pITG->SetNumProperty("DrawArrows", !pITG->GetNumProperty("DrawArrows"));
  557. }
  558.  
  559. void CMainFrame::OnOptionsDrawbacklinks()
  560. {
  561.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  562.     pITG->SetNumProperty("DrawArrows", 
  563.         (pITG->GetNumProperty("DrawArrows") == ITG_NoBackLinks) ? ITG_SolidBackLinks : ITG_NoBackLinks);
  564. }
  565.  
  566. void CMainFrame::OnOptionsDrawcolored()
  567. {
  568.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  569.     pITG->SetNumProperty("DrawColored", !pITG->GetNumProperty("DrawColored"));
  570. }
  571.  
  572. void CMainFrame::OnOptionsDrawconnlabels()
  573. {
  574.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  575.     pITG->SetNumProperty("DrawConnLabels", !pITG->GetNumProperty("DrawConnLabels"));
  576. }
  577.  
  578. void CMainFrame::OnOptionsDrawhandles()
  579. {
  580.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  581.     pITG->SetNumProperty("DrawHandles", !pITG->GetNumProperty("DrawHandles"));
  582. }
  583.  
  584. void CMainFrame::OnOptionsDrawitemlabels()
  585. {
  586.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  587.     pITG->SetNumProperty("DrawItemLabels", !pITG->GetNumProperty("DrawItemLabels"));
  588. }
  589.  
  590. void CMainFrame::OnUpdateNodeFindagain(CCmdUI* pCmdUI)
  591. {
  592.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  593.     pCmdUI->Enable((pView->m_sFindStr != "") ? MF_GRAYED : MF_ENABLED);    
  594. }
  595.  
  596. void CMainFrame::OnOptionsArrangemodeCompact()
  597. {
  598.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  599.     pITG->SetNumProperty("ArrangeMode", ITG_ModeCompact);
  600. }
  601.  
  602. void CMainFrame::OnUpdateOptionsArrangemodeCompact(CCmdUI* pCmdUI)
  603. {
  604.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  605.     int isSet = pITG->GetNumProperty("ArrangeMode") == ITG_ModeCompact;
  606.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  607. }
  608.  
  609. void CMainFrame::OnOptionsArrangemodeFlowchart()
  610. {
  611.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  612.     pITG->SetNumProperty("ArrangeMode", ITG_ModeFlowChart);
  613. }
  614.  
  615. void CMainFrame::OnUpdateOptionsArrangemodeFlowchart(CCmdUI* pCmdUI)
  616. {
  617.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  618.     int isSet = pITG->GetNumProperty("ArrangeMode") == ITG_ModeFlowChart;
  619.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  620. }
  621.  
  622. void CMainFrame::OnOptionsArrangemodeHierarchy()
  623. {
  624.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  625.     pITG->SetNumProperty("ArrangeMode", ITG_ModeHierarchy);
  626. }
  627.  
  628. void CMainFrame::OnUpdateOptionsArrangemodeHierarchy(CCmdUI* pCmdUI)
  629. {
  630.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  631.     int isSet = pITG->GetNumProperty("ArrangeMode") == ITG_ModeHierarchy;
  632.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  633. }
  634.  
  635. void CMainFrame::OnOptionsArrangemodeTree()
  636. {
  637.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  638.     pITG->SetNumProperty("ArrangeMode", ITG_ModeTree);
  639. }
  640.  
  641. void CMainFrame::OnUpdateOptionsArrangemodeTree(CCmdUI* pCmdUI)
  642. {
  643.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  644.     int isSet = pITG->GetNumProperty("ArrangeMode") == ITG_ModeTree;
  645.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  646. }
  647.  
  648. void CMainFrame::OnOptionsAutoarrangeAutomatic()
  649. {
  650.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  651.     pITG->SetNumProperty("AutoArrange", ITG_AutoArrange);
  652. }
  653.  
  654. void CMainFrame::OnOptionsAutoarrangeManual()
  655. {
  656.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  657.     pITG->SetNumProperty("AutoArrange", ITG_ManualArrange);
  658. }
  659.  
  660. void CMainFrame::OnOptionsAutoarrangeNow()
  661. {
  662.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  663.     pITG->SetNumProperty("AutoArrange", ITG_ArrangeNow);
  664. }
  665.  
  666. void CMainFrame::OnUpdateOptionsAutoarrangeAutomatic(CCmdUI* pCmdUI)
  667. {
  668.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  669.     int isSet = pITG->GetNumProperty("AutoArrange") == ITG_AutoArrange;
  670.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  671. }
  672.  
  673. void CMainFrame::OnUpdateOptionsAutoarrangeManual(CCmdUI* pCmdUI)
  674. {
  675.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  676.     int isSet = pITG->GetNumProperty("AutoArrange") == ITG_ManualArrange;
  677.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  678. }
  679.  
  680. void CMainFrame::OnOptionsDrawdirBottomtotop()
  681. {
  682.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  683.     pITG->SetNumProperty("DrawDir", ITG_BottomToTop);
  684. }
  685.  
  686. void CMainFrame::OnOptionsDrawdirLefttoright()
  687. {
  688.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  689.     pITG->SetNumProperty("DrawDir", ITG_LeftToRight);
  690. }
  691.  
  692. void CMainFrame::OnOptionsDrawdirRighttoleft()
  693. {
  694.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  695.     pITG->SetNumProperty("DrawDir", ITG_RightToLeft);
  696. }
  697.  
  698. void CMainFrame::OnOptionsDrawdirToptobottom()
  699. {
  700.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  701.     pITG->SetNumProperty("DrawDir", ITG_TopToBottom);
  702. }
  703.  
  704. void CMainFrame::OnUpdateOptionsDrawdirBottomtotop(CCmdUI* pCmdUI)
  705. {
  706.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  707.     int isSet = pITG->GetNumProperty("DrawDir") == ITG_BottomToTop;
  708.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  709. }
  710.  
  711. void CMainFrame::OnUpdateOptionsDrawdirLefttoright(CCmdUI* pCmdUI)
  712. {
  713.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  714.     int isSet = pITG->GetNumProperty("DrawDir") == ITG_LeftToRight;
  715.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  716. }
  717.  
  718. void CMainFrame::OnUpdateOptionsDrawdirRighttoleft(CCmdUI* pCmdUI)
  719. {
  720.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  721.     int isSet = pITG->GetNumProperty("DrawDir") == ITG_RightToLeft;
  722.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  723. }
  724.  
  725. void CMainFrame::OnUpdateOptionsDrawdirToptobottom(CCmdUI* pCmdUI)
  726. {
  727.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  728.     int isSet = pITG->GetNumProperty("DrawDir") == ITG_TopToBottom;
  729.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  730. }
  731.  
  732. void CMainFrame::OnOptionsDrawscale100()
  733. {
  734.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  735.     pITG->SetNumProperty("DrawScale", 100);
  736. }
  737.  
  738. void CMainFrame::OnOptionsDrawscale200()
  739. {
  740.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  741.     pITG->SetNumProperty("DrawScale", 200);
  742. }
  743.  
  744. void CMainFrame::OnOptionsDrawscale25()
  745. {
  746.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  747.     pITG->SetNumProperty("DrawScale", 25);
  748. }
  749.  
  750. void CMainFrame::OnOptionsDrawscale400()
  751. {
  752.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  753.     pITG->SetNumProperty("DrawScale", 400);
  754. }
  755.  
  756. void CMainFrame::OnOptionsDrawscale50()
  757. {
  758.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  759.     pITG->SetNumProperty("DrawScale", 50);
  760. }
  761.  
  762. void CMainFrame::OnOptionsDrawscale75()
  763. {
  764.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  765.     pITG->SetNumProperty("DrawScale", 75);
  766. }
  767.  
  768. void CMainFrame::OnOptionsDrawscaleFittoscreen()
  769. {
  770.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  771.     pITG->SetNumProperty("DrawScale", 0);
  772. }
  773.  
  774. void CMainFrame::OnUpdateOptionsDrawscale100(CCmdUI* pCmdUI)
  775. {
  776.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  777.     int isSet = pITG->GetNumProperty("DrawScale") == 100;
  778.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  779. }
  780.  
  781. void CMainFrame::OnUpdateOptionsDrawscale200(CCmdUI* pCmdUI)
  782. {
  783.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  784.     int isSet = pITG->GetNumProperty("DrawScale") == 200;
  785.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  786. }
  787.  
  788. void CMainFrame::OnUpdateOptionsDrawscale25(CCmdUI* pCmdUI)
  789. {
  790.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  791.     int isSet = pITG->GetNumProperty("DrawScale") == 25;
  792.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  793. }
  794.  
  795. void CMainFrame::OnUpdateOptionsDrawscale400(CCmdUI* pCmdUI)
  796. {
  797.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  798.     int isSet = pITG->GetNumProperty("DrawScale") == 400;
  799.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  800. }
  801.  
  802. void CMainFrame::OnUpdateOptionsDrawscale50(CCmdUI* pCmdUI)
  803. {
  804.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  805.     int isSet = pITG->GetNumProperty("DrawScale") == 50;
  806.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  807. }
  808.  
  809. void CMainFrame::OnUpdateOptionsDrawscale75(CCmdUI* pCmdUI)
  810. {
  811.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  812.     int isSet = pITG->GetNumProperty("DrawScale") == 75;
  813.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  814. }
  815.  
  816. void CMainFrame::OnUpdateOptionsDrawscaleFittoscreen(CCmdUI* pCmdUI)
  817. {
  818.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  819.     int isSet = pITG->GetNumProperty("DrawScale") == 0;
  820.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  821. }
  822.  
  823. void CMainFrame::OnOptionsRubberbandBoth()
  824. {
  825.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  826.     pITG->SetNumProperty("RubberBand", ITG_RBBoth);
  827. }
  828.  
  829. void CMainFrame::OnOptionsRubberbandHandles()
  830. {
  831.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  832.     pITG->SetNumProperty("RubberBand", ITG_RBHandles);
  833. }
  834.  
  835. void CMainFrame::OnOptionsRubberbandItems()
  836. {
  837.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  838.     pITG->SetNumProperty("RubberBand", ITG_RBItems);
  839. }
  840.  
  841. void CMainFrame::OnOptionsRubberbandNone()
  842. {
  843.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  844.     pITG->SetNumProperty("RubberBand", ITG_RBNone);
  845. }
  846.  
  847. void CMainFrame::OnUpdateOptionsRubberbandBoth(CCmdUI* pCmdUI)
  848. {
  849.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  850.     int isSet = pITG->GetNumProperty("RubberBand") == ITG_RBBoth;
  851.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  852. }
  853.  
  854. void CMainFrame::OnUpdateOptionsRubberbandHandles(CCmdUI* pCmdUI)
  855. {
  856.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  857.     int isSet = pITG->GetNumProperty("RubberBand") == ITG_RBHandles;
  858.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  859. }
  860.  
  861. void CMainFrame::OnUpdateOptionsRubberbandItems(CCmdUI* pCmdUI)
  862. {
  863.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  864.     int isSet = pITG->GetNumProperty("RubberBand") == ITG_RBItems;
  865.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  866. }
  867.  
  868. void CMainFrame::OnUpdateOptionsRubberbandNone(CCmdUI* pCmdUI)
  869. {
  870.     CVBControl *pITG = ((CItgDemoView *)GetActiveView())->m_ITGraph;
  871.     int isSet = pITG->GetNumProperty("RubberBand") == ITG_RBNone;
  872.     pCmdUI->SetCheck(isSet ? 1 : 0);    
  873. }
  874.  
  875. void CMainFrame::OnSpecialRandomsizednodes()
  876. {
  877.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  878.     pView->m_bRandomSizedNodes = !pView->m_bRandomSizedNodes;
  879. }
  880.  
  881. void CMainFrame::OnUpdateSpecialRandomsizednodes(CCmdUI* pCmdUI)
  882. {
  883.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  884.     pCmdUI->SetCheck(pView->m_bRandomSizedNodes ? 1 : 0);    
  885. }
  886.  
  887. void CMainFrame::OnSpecialRandomtree15nodes()
  888. {
  889.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  890.     pView->RandomTree(15);
  891. }
  892.  
  893. void CMainFrame::OnSpecialRandomtree25nodes()
  894. {
  895.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  896.     pView->RandomTree(25);
  897. }
  898.  
  899. void CMainFrame::OnSpecialRandomtree50nodes()
  900. {
  901.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  902.     pView->RandomTree(50);
  903. }
  904.  
  905. void CMainFrame::OnSpecialRandomtree8nodes()
  906. {
  907.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  908.     pView->RandomTree(8);
  909. }
  910.  
  911. void CMainFrame::OnSpecialRandomdirectedgraph15nodes()
  912. {
  913.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  914.     pView->RandomDirected(15);
  915. }
  916.  
  917. void CMainFrame::OnSpecialRandomdirectedgraph25nodes()
  918. {
  919.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  920.     pView->RandomDirected(25);
  921. }
  922.  
  923. void CMainFrame::OnSpecialRandomdirectedgraph50nodes()
  924. {
  925.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  926.     pView->RandomDirected(50);
  927. }
  928.  
  929. void CMainFrame::OnSpecialRandomdirectedgraph8nodes()
  930. {
  931.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  932.     pView->RandomDirected(8);
  933. }
  934.  
  935. void CMainFrame::OnUpdateFilePrintout(CCmdUI* pCmdUI)
  936. {
  937.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  938.     if(pView->m_nPrintoutType == 1)
  939.         pCmdUI->SetText("Printout (Graph)");
  940.     else
  941.         pCmdUI->SetText("Printout (Report)");
  942. }
  943.  
  944. void CMainFrame::OnFilePrintout()
  945. {
  946.     CItgDemoView *pView = (CItgDemoView *)GetActiveView();
  947.     if(pView->m_nPrintoutType == 1)
  948.         pView->m_nPrintoutType = 2; // Print a Report
  949.     else
  950.         pView->m_nPrintoutType = 1; // Print the Graph
  951. }
  952.